<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es">
<head>
<title>Bucles y boolenos</title>
<!-- presentations based on Dave's model at http://www.w3.org/2006/02/woa/ -->
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="copyright" content="Copyright &#169; 2008 Luis Miguel Morillas" />
<meta name="font-size-adjustment" content="1" />
<link rel="stylesheet" href="notebook.css"
 type="text/css" media="screen, projection, print" />
<script src="slidy.js" type="text/javascript">
</script>
</head>
<body>
<!-- this defines the slide background -->

<div class="background">

  <div class="margin">
    <div class="header">
    <!-- sized and colored via CSS -->
    </div>
    <!-- hidden style graphics to ensure they are saved with other content -->
    <img class="hidden" src="square-bullet.gif" alt="" />
    <img class="hidden" src="fold.bmp" alt="" />
    <img class="hidden" src="fold.bmp" alt="" />
    <img class="hidden" src="fold-dim.bmp" alt="" />

    <img class="hidden" src="nofold-dim.bmp" alt="" />
    <img class="hidden" src="unfold-dim.bmp" alt="" />
    <img class="hidden" src="bullet-fold.gif" alt="" />
    <img class="hidden" src="bullet-unfold.gif" alt="" />
    <img class="hidden" src="bullet-fold-dim.gif" alt="" />
    <img class="hidden" src="bullet-nofold-dim.gif" alt="" />
    <img class="hidden" src="bullet-unfold-dim.gif" alt="" />
    <img class="sharpener" src="sharpener.gif" alt="sharpener" />
    <img class="pencil" src="pencil3.gif" alt="pencil" />

  </div>
</div>

<div class="slide cover">
<div class="header">
<h1>Bucles y booleanos</h1>
<p><a href="mailto:morillas@gmail.com">Luis Miguel Morillas</a>
</p>
</div>
<img src="sky.jpg" class="cover"
alt="wispy clouds in a blue sky" />
<h2>Programación en lenguajes estructurados<br />
Ciclo DAI. IES Los Enlaces</h2>
</div>


<div class="slide">
<h1>Revisión bucles for</h1>
<div class="extract">
<ul> 
  <li>Hemos hecho repeticiones con <strong>for</strong></li>
  <li>Lo usamos para:
    <ul>
      <li>Recorrer una secuencia</li>
      <li>Repetir un número fijo de veces algo</li>
    </ul>
  </li>
</ul>
<pre>
  for var in secuencia:
      bloque

  for x in range(10):
      print x
</pre>

</div>
</div>

<div class="slide">
<h1>Bucles no fijos</h1>
<div class="extract">
  <ul>
    <li>No siempre sabemos cuántas veces va a repetirse algo</li>
    <li>Un profesor introduce notas ¿cuántas?</li>
    <li>¿Cuántas canciones hay en tu mp3?</li>
    <li>Idea: repetir algo mientras se cumple una condición</li>
    <li>
      <pre>
	while condición:
	    bloque
      </pre>
      <pre>
	# lista de números positivos
	num = input("Introduzca número: ")
	while num >= 0:
	    print num
	    num = input("Introduzca número: ")
      </pre>
    </li>
  </ul>
</div>
</div>




<div class="slide">
<h1>Patrones comunes: bucles interactivos</h1>
<div class="extract">
  <h2>Modelo</h2>
  <ul>
    <li>El usuario controla el bucle en todo momento (se le pregunta cada vez si quiere repetir)</li>
  </ul>
  <pre>
    poner más_datos a sí
    while más_datos es sí:
        tomar el siguiente dato
	procesar el dato
	preguntar si hay más datos
  </pre>
  <h2>Ejemplo:</h2>
  <pre>
    suma = 0.0
    contador = 0
    mas_datos = 'si'
    while mas_datos == si:
        x = input("Introduzca un número >> ")
	suma = suma + x
	contador = contador + 1
	mas_datos = raw_input("¿Hay más números? (si/no)  ")
    print "La media es", suma/contador
  </pre>
</div>
</div>
<div class="slide">
  <h1>Patrones comunes: centinela</h1>
  <div class="extract">
    <ul>
      <li>El bucle continúa hasta que se alcanza un valor especial que indica el fin</li>
    </ul>
    <pre>
      suma = 0.0
      contador = 0
      x = input("Introduzca un número positivo: ")
      while x >= 0:
          suma = suma + x
	  contador = contador + 1
      print "La media de los números es", suma / contador
    </pre>
  </div>
</div>
<div class="slide">
  <h1> seguirá ... </h1>
</div>


<div class="slide">
  <h1>Bucles anidados</h1>
  <div class="extract">
    <ul>
      <li>Ver ejercicios</li>
    </ul>

  </div>
</div>
<div class="slide">
  <h1>Ejercicios (1)</h1>
  <ol>
    <li>Escribe un programa nombres que pida al usuario nombres de amigos. El programa escribirá los nombres de los amigos en un fichero llamado amigos.txt (cada uno en una línea). Utiliza los dos patrones vistos: interactivo y centinela.
    </li>
    <li>Escribe un programa <strong>diez_primos.py</strong> que muestre en pantalla los diez primeros números primos. Crea una función es_primo(num) que devuelva Verdadero o Falso según el número sea primo o no. Ayuda con <a href="http://es.wikipedia.org/wiki/N%C3%BAmero_primo">números primos</a>.</li>
    <li>Diseña un programa que solicite la lectura de un número entre 0 y 10 (ambos inclusive). Si el usuario teclea un número fuera del rango válido, el programa solicitará nuevamente la introducción del valor cuantas veces sea necesario.</li>
    <li>Diseña un programa que solicite la lectura de un texto que no contenga letras mayúsculas. Si el usuario teclea una letra mayúscula, el programa solicitará nuevamente la introducción del texto cuantas veces sea preciso.
    </li>
  </ol>
</div>

<div class="slide">
  <h1>Ejercicios (2)</h1>
  <ul>
    <li>Escribe un programa que pida números hasta que el usuario introduzca un númeor negativo. Al final muestra cuántos números ha introducido el usuario y su suma.  Modifica el programa para que muestre también el mayor y el menor.</li>
    <li>Según la <a href="http://es.wikipedia.org/wiki/Conjetura_de_Goldbach">Conjetura de Goldbach </a> un número par es la suma de dos números primos. Escribe un programa que pida un número par y muestre los dos números primos de los que es suma</li>
    <li>El <a href="http://es.wikipedia.org/wiki/M%C3%A1ximo_com%C3%BAn_divisor">máximo común divisor</a> de dos números es el mayor divisor posible de todos ellos. Escribe un programa que encuentre el máximo común divisor de dos números usando el <a href="http://es.wikipedia.org/wiki/Algoritmo_de_Euclides">algoritmo de euclides</a></li>
    <li>Tenemos un fichero con números (uno por línea) llamado cuentas.txt que contiene los gastos de una familia en un mes. Escribe un programa que lea el fichero y muestre la suma de los gastos del mes.</li>
    <li>Ahora vamos a procesar un fichero cuentas_por_semanas.txt que tiene los gastos ordenados por semanas. Cadas semana se representa en una línea. Los gastos de la semana están separados por espacios en blanco. Haz un programa que muestre la suma de los gastos del fichero, la media de gasto semanal y la semana que más gastó (número de semana y gastó).</li>

  </ul>
</div>
<div class="slide">
  <h1>Ejercicios (3)</h1>
  <ul>
    <li>Escribe un programa que pida a un usuario su nombre y sus dos apellidos. El programa mostrará la información:
    <pre>
Primer apellido:   Pérez
Segundo apellido:  Martínez
Nombre:            María
    </pre>
El nombre y el primer apellido son obligatorios. El segundo apellido no. Si el usuario no introduce el segundo apellido, el programa no mostrará la etiqueta "Segundo apellido"</li>
<li>
  Juego adivinar número. El programa elige un número al azar del 1 al 100. El jugador intenta adivinarlo. El programa le da pistas (mayor, menor, ...) El jugador tiene 10 intentos para adivinar el número, si no habrá perdido. Para crear el número aleatorio, usa <pre>random.randint(menor, mayor)</pre> <a href="http://docs.python.org/library/random.html">http://docs.python.org/library/random.html</a></li>
    <li>continuará ... </li>
  </ul>
</div>
</body>
</html>
